/*
 * commons is a based project implemented
 * Copyright (C) 2024 Jasmine
 */
package com.easy.core.utils;

import java.util.Collection;
import java.util.Objects;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import com.easy.core.function.ExecuteFunction;

/**
 * 执行
 *
 * @author Jasmine
 * @since 1.0.0
 */
public class ExecuteUtils {

    /**
     * 若obj非空，则执行function函数 obj为字符串/数组/集合，obj长度大于0就执行function 若object非null，则执行function函数
     *
     * @param obj : 判断对象
     * @param function : 执行函数 eg: ExecuteUtils.executeNotNull(sysDictTypeDTO.getId(), () ->
     *            lambda.eq(SysDictType::getId, sysDictTypeDTO.getId()));
     */
    public static void executeNotNull(Object obj, ExecuteFunction function) {
        if (ObjectUtils.isEmpty(obj)) {
            return;
        }
        function.execute();
    }

    /**
     * 若str非空，则执行function函数
     *
     * @param str : 判断对象
     * @param function : 执行函数
     */
    public static void executeNotBlank(String str, ExecuteFunction function) {
        if (StringUtils.isBlank(str)) {
            return;
        }
        function.execute();
    }

    /**
     * 若str为空，则执行function函数
     *
     * @param str : 判断对象
     * @param function : 执行函数
     */
    public static void executeIsBlank(String str, ExecuteFunction function) {
        if (StringUtils.isNotBlank(str)) {
            return;
        }
        function.execute();
    }

    /**
     * 若collection非空，则执行function函数
     *
     * @param collection : 集合
     * @param function : 执行函数
     */
    public static void executeNotEmpty(Collection collection, ExecuteFunction function) {
        if (CollectionUtils.isEmpty(collection)) {
            return;
        }
        function.execute();
    }

    /**
     * 若collection为空，则执行function函数
     *
     * @param collection: 判断集合
     * @param function : 执行函数
     */
    public static void executeIsEmpty(Collection collection, ExecuteFunction function) {
        if (!CollectionUtils.isEmpty(collection)) {
            return;
        }
        function.execute();
    }

    /**
     * 若object为null，则执行function函数
     *
     * @param object : 判断对象
     * @param function : 执行函数 eg: ExecuteUtils.executeNotNull(sysDictTypeDTO.getId(), () ->
     *            lambda.eq(SysDictType::getId, sysDictTypeDTO.getId()));
     */
    public static void executeIsNull(Object object, ExecuteFunction function) {
        if (Objects.isNull(object)) {
            function.execute();
        }
    }

    /**
     * 若flag为true，则执行function函数
     *
     * @param flag : 判断对象
     * @param function : 执行函数
     */
    public static void executeTrue(Boolean flag, ExecuteFunction function) {
        if (flag) {
            function.execute();
        }
    }
}
